﻿#include "MyJsonData.h"

MyJsonData::MyJsonData()
{

}

QByteArray MyJsonData::toJson() const
{
	m_jdoc.setObject(m_jobj);

	return m_jdoc.toJson(QJsonDocument::JsonFormat::Compact);
}

MyJsonData MyJsonData::fromJson(const QByteArray& json)
{
	auto jdoc = QJsonDocument::fromJson(json);
	MyJsonData temp;
	temp.setObject(jdoc.object());

	return temp;
}

void MyJsonData::setObject(const QJsonObject& object)
{
	m_jobj = object;
}

void MyJsonData::addValue(const QString& key, double value)
{
	m_jobj.insert(key, value);
}

void MyJsonData::addValue(const QString& key, int value)
{
	m_jobj.insert(key, value);
}

void MyJsonData::addValue(const QString& key, const QString& value)
{
	m_jobj.insert(key, value);
}

void MyJsonData::addValue(const QString& key, const QStringList& value)
{
	QJsonArray array;
	for (auto v : value)
	{
		array.append(v);
	}

	m_jobj.insert(key, array);
}

void MyJsonData::addValue(const QString& key, const QList<double>& value)
{
	QJsonArray array;
	for (auto v : value)
	{
		array.append(v);
	}

	m_jobj.insert(key, array);
}

bool MyJsonData::boolValue(const QString& key)
{
	if (!m_jobj.contains(key))
	{
		qWarning("key[%s] not found !", qUtf16Printable(key));	//是一个宏，用于将QString对象转换成const char* 类型的UTF-8字符串
		return false;
	}
		

	if(m_jobj.value(key).isBool())
		return m_jobj.value(key).toBool();

	return false;
}

double MyJsonData::doubleValue(const QString& key)
{
	if (m_jobj.contains(key))
		if (m_jobj.value(key).isDouble())
			return m_jobj.value(key).toDouble();

	return 0.0;
}

int MyJsonData::integerValue(const QString& key)
{
	if (m_jobj.contains(key))
		if (m_jobj.value(key).isDouble())
			return m_jobj.value(key).toInt();

	return 0;
}

QString MyJsonData::stringValue(const QString& key)
{
	if (m_jobj.contains(key))
		if (m_jobj.value(key).isString())
			return m_jobj.value(key).toString();

	return QString();
}

QList<double> MyJsonData::numberArray(const QString& key)
{
	QList<double> list;

	if (m_jobj.contains(key))
		if (m_jobj.value(key).isArray())
		{
			for (auto v : m_jobj.value(key).toArray())
			{
				list.append(v.toDouble());
			}
		}

	return QList<double>();
}

QStringList MyJsonData::stringArray(const QString& key)
{
	QStringList list;

	if (m_jobj.contains(key))
		if (m_jobj.value(key).isArray())
		{
			for (auto v : m_jobj.value(key).toArray())
			{
				list.append(v.toString());
			}
		}

	return QStringList();
}
